<?php

require_once "DB.php";

/**
 * Classe de conexão com o banco
 */
class BancoDeDados {

    private static $bancoDeDados;
    private $serverName;
    private $userName;
    private $password;
    private $databaseName;
    private $link;
    //private $sgbd = "MYSQL";
    private $sgbd = "POSTGRES";

    /**
     * Construtor privado que se conecta ao banco de dados
     */
    private function __construct() {
        $this->userName = "postgres";
        $this->password = "admin";
        
        if ($this->sgbd == "MYSQL") {
            $this->serverName = "192.168.0.104";
            $this->databaseName = "midas";
            $this->link = DB::connect("mysqli://" . $this->userName . ":" . $this->password . "@" . $this->serverName . "/" . $this->databaseName);
        } elseif ($this->sgbd == "POSTGRES") {
            $this->serverName = "localhost";
            $this->databaseName = "midas";
            $this->link = DB::connect("pgsql://" . $this->userName . ":" . $this->password . "@" . $this->serverName . "/" . $this->databaseName);
        } else {
            throw new Exception("There is no database configured!");
        }
        
        if (!DB::isError($this->link)) {
            $this->link->setFetchMode(DB_FETCHMODE_ASSOC);
        } else {
            throw new Exception("Standard Message: {$this->link->getMessage()}<br>Standard Code: {$this->link->getCode()}<br>DBMS/User Message: {$this->link->getUserInfo()}<br>DBMS/Debug Message: {$this->link->getDebugInfo()}");
        }
    }

    /**
     * @method BancoDeDados getInstance() para obter uma única instância do Classe que se conecta ao banco de dados
     * @return BancoDeDados
     */
    public static function getInstance() {
        if (!isset(self::$bancoDeDados)) {
            self::$bancoDeDados = new BancoDeDados();
        }
        return self::$bancoDeDados;
    }

    public function getSgbd() {
        return $this->sgbd;
    }

    public function getLink() {
        return $this->link;
    }
}
?>